// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Wazamba Καζίνο Διαθέσιμα Μπόνους και Προσφορές – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Wazamba Καζίνο Διαθέσιμα Μπόνους και Προσφορές

Το wazamba Casino είναι ένας από τους πιο δημοφιλείς διαδικτυακούς τόπους τυχερών παιχνιδιών, που προσφέρει μια μοναδική εμπειρία για τους λάτρεις των στοιχημάτων. Με την ευκολία του Wazamba login, οι παίκτες μπορούν να απολαύσουν μια ευρεία γκάμα παιχνιδιών, από φρουτάκια έως ζωντανά καζίνο. Εάν αναζητάτε ένα αξιόπιστο καζίνο στην Ελλάδα, το Wazamba Greece είναι η ιδανική επιλογή.

Μια από τις κύριες αιτίες που το Wazamba Casino έχει κερδίσει την εμπιστοσύνη των παικτών είναι τα διαθέσιμα μπόνους που προσφέρει. Από ευκαιρίες για εγγραφή έως προωθητικές προσφορές, το Wazamba εξασφαλίζει ότι κάθε παίκτης θα βρει κάτι που ταιριάζει στις ανάγκες του. Επιπλέον, οι Wazamba κριτικες αναδεικνύουν την ποιότητα των υπηρεσιών και την ευκολία χρήσης της πλατφόρμας.

Εάν σκέφτεστε να δοκιμάσετε την τύχη σας, το Wazamba Casino review μπορεί να σας βοηθήσει να κατανοήσετε καλύτερα τις δυνατότητες και τα πλεονεκτήματα αυτής της πλατφόρμας. Με το Wazamba casino login, έχετε πρόσβαση σε έναν κόσμο γεμάτο ψυχαγωγία και ευκαιρίες για μεγάλες νίκες. Το Wasamba είναι εδώ για να μετατρέψει κάθε στιγμή του παιχνιδιού σε μια αξέχαστη εμπειρία.

Wazamba Casino: Τα Καλύτερα Μπόνους για Εσάς

Το Wazamba Casino είναι γνωστό για τις εντυπωσιακές προσφορές και τα μπόνους που προσφέρει στους παίκτες. Εάν ψάχνετε για μια αξιόπιστη πλατφόρμα, το Wazamba Greece είναι η ιδανική επιλογή, με πληθώρα ευκαιριών για κέρδη και ψυχαγωγία.

Με το Wazamba Casino login, έχετε πρόσβαση σε μια ποικιλία μπόνους, όπως ευνοϊκές προσφορές για νέους παίκτες, δωρεάν περιστροφές στα Wazamba slots και ανταποδοτικά προγράμματα. Το Wazamba Casino review επιβεβαιώνει ότι οι παίκτες μπορούν να απολαύσουν αξιόπιστες και συναρπαστικές εμπειρίες.

Οι Wazamba κριτικες αναφέρουν ότι τα μπόνους είναι εύκολα προσβάσιμα και προσφέρουν πραγματικές ευκαιρίες για μεγάλα κέρδη. Επιπλέον, το Wasamba διαθέτει ένα φιλικό προς τον χρήστη περιβάλλον, που κάνει την εμπειρία του παιχνιδιού ακόμα πιο ευχάριστη.

Αν θέλετε να εξερευνήσετε τα καλύτερα μπόνους και να ζήσετε μοναδικές στιγμές, το Wazamba Casino είναι η τέλεια επιλογή για εσάς!

Πώς να Αξιοποιήσετε τα Προσφερόμενα Επαγγελματικά Έπαθλα

Η Wazamba προσφέρει μια πληθώρα επαγγελματικών επιβραβεύσεων που μπορούν να ενισχύσουν την εμπειρία σας στο Wazamba Casino. Για να τα αξιοποιήσετε στο έπακρο, αρκεί να ακολουθήσετε μερικές απλές στρατηγικές.

Αρχικά, πραγματοποιήστε Wazamba login και εξερευνήστε τις προσφορές που σας ενδιαφέρουν. Τα Wazamba slots είναι μια εξαιρετική επιλογή για να ξεκινήσετε, καθώς συνδυάζουν ψυχαγωγία και ευκαιρίες για κέρδη.

Διαβάστε ένα Wazamba casino review ή Wazamba κριτικες για να μάθετε πώς άλλοι παίκτες έχουν αξιοποιήσει τα επαθλα. Αυτό θα σας βοηθήσει να κατανοήσετε τις καλύτερες πρακτικές και να αποφύγετε τυχόν λάθη.

Επίσης, μην ξεχάσετε να επισκεφτείτε το Wazamba Greece για να δείτε τις τοπικές προσφορές και τα προνόμια που μπορεί να σας ενδιαφέρουν. Η Wasamba (όπως συχνά αποκαλείται) εξασφαλίζει ότι οι παίκτες από την Ελλάδα λαμβάνουν εξατομικευμένη αντιμετώπιση.

Τέλος, χρησιμοποιήστε τα μπόνους και τις επιβραβεύσεις κατά τη διάρκεια του Wazamba casino login για να μεγιστοποιήσετε τις πιθανότητες νίκης σας. Με στρατηγική και προσοχή, τα επαγγελματικά έπαθλα μπορούν να γίνουν ένα ισχυρό εργαλείο στη διαδικασία σας!

Ανακαλύψτε τα Μυστικά του Wazamba Casino

Το Wazamba Casino είναι ένας από τους πιο δημοφιλείς προορισμούς για τους λάτρεις των τυχερών παιχνιδιών στην Ελλάδα. Με το Wazamba login, μπορείτε να αποκτήσετε πρόσβαση σε έναν κόσμο γεμάτο διασκέδαση και ευκαιρίες για κέρδη.

  • Wazamba Slots: Απολαύστε μια τεράστια ποικιλία από slot machines με υψηλή ποιότητα γραφικών και συναρπαστικούς μηχανισμούς.
  • Wazamba Greece: Ειδικές προσφορές και μπόνους για τους Έλληνες παίκτες, που κάνουν την εμπειρία ακόμα πιο συναρπαστική.
  • Wazamba Κριτικές: Οι θετικές κριτικές από τους χρήστες επιβεβαιώνουν την αξιοπιστία και την ποιότητα του καζίνο.

Με το Wazamba Casino login, έχετε πρόσβαση σε μια πληθώρα παιχνιδιών, συμπεριλαμβανομένων των αγαπημένων Wazamba slots. Επιπλέον, το Wasamba προσφέρει ασφάλεια και γρήγορη εξυπηρέτηση, κάνοντας το ιδανικό για όλους.

  • Δημιουργήστε λογαριασμό στο Wazamba Casino.
  • Κάντε Wazamba login και εξερευνήστε τις προσφορές.
  • Απολαύστε τα παιχνίδια και τα μπόνους που προσφέρει το Wazamba Greece.
  • Ανακαλύψτε τα μυστικά του Wazamba Casino και ζήστε μια μοναδική εμπειρία τυχερών παιχνιδιών!

    Επιλογές Ενθάρρυνσης για Νέους Παίκτες

    Το Wazamba Casino προσφέρει μια σειρά από μπόνους και προσφορές για νέους παίκτες, ώστε να ξεκινήσουν την εμπειρία τους με τον καλύτερο δυνατό τρόπο. Μετά το Wazamba login, οι νεοφερμένοι μπορούν να απολαύσουν ειδικές ανταμοιβές που ενισχύουν τις πιθανότητες νίκης τους.

    Προσφορές Καλωσορίσματος

    Με την εγγραφή στο Wazamba Greece, οι παίκτες έχουν τη δυνατότητα να λάβουν ένα εντυπωσιακό μπόνους καλωσορίσματος. Αυτή η προσφορά περιλαμβάνει δωρεάν περιστροφές στα αγαπημένα τους Wazamba slots, καθώς και επιπλέον πιστώσεις για να εξερευνήσουν τις εκατοντάδες παιχνίδια της πλατφόρμας.

    Εκδηλώσεις και Διαγωνισμοί

    Το Wazamba Casino διοργανώνει τακτικές εκδηλώσεις και διαγωνισμούς, προσφέροντας στους παίκτες την ευκαιρία να κερδίσουν επιπλέον ανταμοιβές. Αυτές οι δραστηριότητες είναι ιδανικές για νέους παίκτες που θέλουν να αυξήσουν τις πιθανότητές τους χωρίς επιπλέον κόστος.

    Αν αναζητάτε μια αξιόπιστη και διασκεδαστική εμπειρία, οι Wazamba κριτικες επιβεβαιώνουν την ποιότητα της πλατφόρμας. Είτε πρόκειται για το Wazamba casino login είτε για την εξερεύνηση των Wazamba slots, οι νέοι παίκτες θα βρουν μια φιλόξενη και ανταμειβόμενη κοινότητα στο Wasamba.

    Design and Develop by Ovatheme